Autogenerated HTML docs for v2.22.0-rc0 
diff --git a/technical/api-index.html b/technical/api-index.html index 12489d7..ff5ef09 100644 --- a/technical/api-index.html +++ b/technical/api-index.html 
@@ -880,7 +880,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2019-03-07 12:16:34 JST  + 2019-05-14 01:01:19 JST   </div>   </div>   </body>  
diff --git a/technical/api-trace2.html b/technical/api-trace2.html index dbfe551..6b32b7c 100644 --- a/technical/api-trace2.html +++ b/technical/api-trace2.html 
@@ -756,6 +756,10 @@  <div class="paragraph"><p>Targets are defined using a VTable allowing easy extension to other   formats in the future. This might be used to define a binary format,   for example.</p></div>  +<div class="paragraph"><p>Trace2 is controlled using <code>trace2.*</code> config values in the system and  +global config files and <code>GIT_TR2*</code> environment variables. Trace2 does  +not read from repo local or worktree config files or respect <code>-c</code>  +command line config settings.</p></div>   </div>   </div>   <div class="sect1">  @@ -763,20 +767,27 @@  <div class="sectionbody">   <div class="paragraph"><p>Trace2 defines the following set of Trace2 Targets.   Format details are given in a later section.</p></div>  -<div class="dlist"><dl>  -<dt class="hdlist1">  -<code>GIT_TR2</code> (NORMAL)  -</dt>  -<dd>  -<p>  - a simple printf format like GIT_TRACE.  -</p>  +<div class="sect2">  +<h3 id="_the_normal_format_target">The Normal Format Target</h3>  +<div class="paragraph"><p>The normal format target is a tradition printf format and similar  +to GIT_TRACE format. This format is enabled with the <code>GIT_TR</code>  +environment variable or the <code>trace2.normalTarget</code> system or global  +config setting.</p></div>  +<div class="paragraph"><p>For example</p></div>   <div class="listingblock">   <div class="content">   <pre><code>$ export GIT_TR2=~/log.normal   $ git version   git version 2.20.1.155.g426c96fcdb</code></pre>   </div></div>  +<div class="paragraph"><p>or</p></div>  +<div class="listingblock">  +<div class="content">  +<pre><code>$ git config --global trace2.normalTarget ~/log.normal  +$ git version  +git version 2.20.1.155.g426c96fcdb</code></pre>  +</div></div>  +<div class="paragraph"><p>yields</p></div>   <div class="listingblock">   <div class="content">   <pre><code>$ cat ~/log.normal  @@ -786,121 +797,112 @@  12:28:42.621215 git.c:662 exit elapsed:0.001227 code:0   12:28:42.621250 trace2/tr2_tgt_normal.c:124 atexit elapsed:0.001265 code:0</code></pre>   </div></div>  -</dd>  -<dt class="hdlist1">  -<code>GIT_TR2_PERF</code> (PERF)  -</dt>  -<dd>  -<p>  - a column-based format to replace GIT_TRACE_PERFORMANCE suitable for  - development and testing, possibly to complement tools like gprof.  -</p>  +</div>  +<div class="sect2">  +<h3 id="_the_performance_format_target">The Performance Format Target</h3>  +<div class="paragraph"><p>The performance format target (PERF) is a column-based format to  +replace GIT_TRACE_PERFORMANCE and is suitable for development and  +testing, possibly to complement tools like gprof. This format is  +enabled with the <code>GIT_TR2_PERF</code> environment variable or the  +<code>trace2.perfTarget</code> system or global config setting.</p></div>  +<div class="paragraph"><p>For example</p></div>   <div class="listingblock">   <div class="content">   <pre><code>$ export GIT_TR2_PERF=~/log.perf   $ git version   git version 2.20.1.155.g426c96fcdb</code></pre>   </div></div>  +<div class="paragraph"><p>or</p></div>  +<div class="listingblock">  +<div class="content">  +<pre><code>$ git config --global trace2.perfTarget ~/log.perf  +$ git version  +git version 2.20.1.155.g426c96fcdb</code></pre>  +</div></div>  +<div class="paragraph"><p>yields</p></div>   <div class="listingblock">   <div class="content">   <pre><code>$ cat ~/log.perf   12:28:42.620675 common-main.c:38 | d0 | main | version | | | | | 2.20.1.155.g426c96fcdb  -12:28:42.621001 common-main.c:39 | d0 | main | start | | | | | git version  +12:28:42.621001 common-main.c:39 | d0 | main | start | | 0.001173 | | | git version   12:28:42.621111 git.c:432 | d0 | main | cmd_name | | | | | version (version)   12:28:42.621225 git.c:662 | d0 | main | exit | | 0.001227 | | | code:0   12:28:42.621259 trace2/tr2_tgt_perf.c:211 | d0 | main | atexit | | 0.001265 | | | code:0</code></pre>   </div></div>  -</dd>  -<dt class="hdlist1">  -<code>GIT_TR2_EVENT</code> (EVENT)  -</dt>  -<dd>  -<p>  - a JSON-based format of event data suitable for telemetry analysis.  -</p>  +</div>  +<div class="sect2">  +<h3 id="_the_event_format_target">The Event Format Target</h3>  +<div class="paragraph"><p>The event format target is a JSON-based format of event data suitable  +for telemetry analysis. This format is enabled with the <code>GIT_TR2_EVENT</code>  +environment variable or the <code>trace2.eventTarget</code> system or global config  +setting.</p></div>  +<div class="paragraph"><p>For example</p></div>   <div class="listingblock">   <div class="content">   <pre><code>$ export GIT_TR2_EVENT=~/log.event   $ git version   git version 2.20.1.155.g426c96fcdb</code></pre>   </div></div>  +<div class="paragraph"><p>or</p></div>  +<div class="listingblock">  +<div class="content">  +<pre><code>$ git config --global trace2.eventTarget ~/log.event  +$ git version  +git version 2.20.1.155.g426c96fcdb</code></pre>  +</div></div>  +<div class="paragraph"><p>yields</p></div>   <div class="listingblock">   <div class="content">   <pre><code>$ cat ~/log.event  -{"event":"version","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.620713","file":"common-main.c","line":38,"evt":"1","exe":"2.20.1.155.g426c96fcdb"}  -{"event":"start","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621027","file":"common-main.c","line":39,"argv":["git","version"]}  -{"event":"cmd_name","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621122","file":"git.c","line":432,"name":"version","hierarchy":"version"}  -{"event":"exit","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621236","file":"git.c","line":662,"t_abs":0.001227,"code":0}  -{"event":"atexit","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621268","file":"trace2/tr2_tgt_event.c","line":163,"t_abs":0.001265,"code":0}</code></pre>  +{"event":"version","sid":"sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.620713Z","file":"common-main.c","line":38,"evt":"1","exe":"2.20.1.155.g426c96fcdb"}  +{"event":"start","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621027Z","file":"common-main.c","line":39,"t_abs":0.001173,"argv":["git","version"]}  +{"event":"cmd_name","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621122Z","file":"git.c","line":432,"name":"version","hierarchy":"version"}  +{"event":"exit","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621236Z","file":"git.c","line":662,"t_abs":0.001227,"code":0}  +{"event":"atexit","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621268Z","file":"trace2/tr2_tgt_event.c","line":163,"t_abs":0.001265,"code":0}</code></pre>   </div></div>  -</dd>  -</dl></div>   </div>  -</div>  -<div class="sect1">  -<h2 id="_enabling_a_target">Enabling a Target</h2>  -<div class="sectionbody">  -<div class="paragraph"><p>A Trace2 Target is enabled when the corresponding environment variable  -(<code>GIT_TR2</code>, <code>GIT_TR2_PERF</code>, or <code>GIT_TR2_EVENT</code>) is set. The following  -values are recognized.</p></div>  -<div class="dlist"><dl>  -<dt class="hdlist1">  -<code>0</code>  -</dt>  -<dt class="hdlist1">  -<code>false</code>  -</dt>  -<dd>  -<p>  - Disables the target.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>1</code>  -</dt>  -<dt class="hdlist1">  -<code>true</code>  -</dt>  -<dd>  -<p>  - Enables the target and writes stream to <code>STDERR</code>.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>[2-9]</code>  -</dt>  -<dd>  -<p>  - Enables the target and writes to the already opened file descriptor.  -</p>  -</dd>  -<dt class="hdlist1">  -<code>&lt;absolute-pathname&gt;</code>  -</dt>  -<dd>  -<p>  - Enables the target, opens and writes to the file in append mode.  -</p>  -<div class="literalblock">  +<div class="sect2">  +<h3 id="_enabling_a_target">Enabling a Target</h3>  +<div class="paragraph"><p>To enable a target, set the corresponding environment variable or  +system or global config value to one of the following:</p></div>  +<div class="openblock">   <div class="content">  -<pre><code>If the target already exists and is a directory, the traces will be  +<div class="ulist"><ul>  +<li>  +<p>  +<code>0</code> or <code>false</code> - Disables the target.  +</p>  +</li>  +<li>  +<p>  +<code>1</code> or <code>true</code> - Writes to <code>STDERR</code>.  +</p>  +</li>  +<li>  +<p>  +<code>[2-9]</code> - Writes to the already opened file descriptor.  +</p>  +</li>  +<li>  +<p>  +<code>&lt;absolute-pathname&gt;</code> - Writes to the file in append mode.  +</p>  +</li>  +<li>  +<p>  +<code>af_unix:[&lt;socket_type&gt;:]&lt;absolute-pathname&gt;</code> - Write to a  +Unix DomainSocket (on platforms that support them). Socket  +type can be either <code>stream</code> or <code>dgram</code>; if omitted Git will  +try both.  +</p>  +</li>  +</ul></div>  +</div></div>  +<div class="paragraph"><p>If the target already exists and is a directory, the traces will be   written to files (one per process) underneath the given directory. They   will be named according to the last component of the SID (optionally  -followed by a counter to avoid filename collisions).</code></pre>  -</div></div>  -</dd>  -<dt class="hdlist1">  -<code>af_unix:[&lt;socket_type&gt;:]&lt;absolute-pathname&gt;</code>  -</dt>  -<dd>  -<p>  - Enables the target, opens and writes to a Unix Domain Socket  - (on platforms that support them).  -</p>  -<div class="paragraph"><p>Socket type can be either <code>stream</code> or <code>dgram</code>. If the socket type is  -omitted, Git will try both.</p></div>  -</dd>  -</dl></div>  +followed by a counter to avoid filename collisions).</p></div>  +</div>   </div>   </div>   <div class="sect1">  @@ -944,18 +946,28 @@  <div class="paragraph"><p>These are concerned with the lifetime of the overall git process.</p></div>   <div class="dlist"><dl>   <dt class="hdlist1">  +<code>void trace2_initialize_clock()</code>  +</dt>  +<dd>  +<p>  + Initialize the Trace2 start clock and nothing else. This should  + be called at the very top of main() to capture the process start  + time and reduce startup order dependencies.  +</p>  +</dd>  +<dt class="hdlist1">   <code>void trace2_initialize()</code>   </dt>   <dd>   <p>   Determines if any Trace2 Targets should be enabled and  - initializes the Trace2 facility. This includes starting the  - elapsed time clocks and thread local storage (TLS).  + initializes the Trace2 facility. This includes setting up the  + Trace2 thread local storage (TLS).   </p>   <div class="paragraph"><p>This function emits a "version" message containing the version of git   and the Trace2 protocol.</p></div>   <div class="paragraph"><p>This function should be called from <code>main()</code> as early as possible in  -the life of the process.</p></div>  +the life of the process after essential process initialization.</p></div>   </dd>   <dt class="hdlist1">   <code>int trace2_is_enabled()</code>  @@ -1060,7 +1072,8 @@  Emits a "def_param" messages for "important" configuration   settings.   </p>  -<div class="paragraph"><p>The environment variable <code>GIT_TR2_CONFIG_PARAMS</code> can be set to a  +<div class="paragraph"><p>The environment variable <code>GIT_TR2_CONFIG_PARAMS</code> or the <code>trace2.configParams</code>  +config value can be set to a   list of patterns of important configuration settings, for example:   <code>core.*,remote.*.url</code>. This function will iterate over all config   settings and emit a "def_param" message for each match.</p></div>  @@ -1070,8 +1083,8 @@  </dt>   <dd>   <p>  - Emits a "def_param" message for a specific configuration  - setting IFF it matches the <code>GIT_TR2_CONFIG_PARAMS</code> pattern.  + Emits a "def_param" message for a new or updated key/value  + pair IF <code>key</code> is considered important.   </p>   <div class="paragraph"><p>This is used to hook into <code>git_config_set()</code> and catch any   configuration changes and update a value previously reported by  @@ -1277,8 +1290,6 @@  <div class="sectionbody">   <div class="sect2">   <h3 id="_normal_format">NORMAL Format</h3>  -<div class="paragraph"><p>NORMAL format is enabled when the <code>GIT_TR2</code> environment variable is  -set.</p></div>   <div class="paragraph"><p>Events are written as lines of the form:</p></div>   <div class="listingblock">   <div class="content">  @@ -1304,16 +1315,14 @@  not escaped, so the event may spill across multiple lines.</p></div>   </dd>   </dl></div>  -<div class="paragraph"><p>If <code>GIT_TR2_BRIEF</code> is true, the <code>time</code>, <code>filename</code>, and <code>line</code> fields  -are omitted.</p></div>  +<div class="paragraph"><p>If <code>GIT_TR2_BRIEF</code> or <code>trace2.normalBrief</code> is true, the <code>time</code>, <code>filename</code>,  +and <code>line</code> fields are omitted.</p></div>   <div class="paragraph"><p>This target is intended to be more of a summary (like GIT_TRACE) and   less detailed than the other targets. It ignores thread, region, and   data messages, for example.</p></div>   </div>   <div class="sect2">   <h3 id="_perf_format">PERF Format</h3>  -<div class="paragraph"><p>PERF format is enabled when the <code>GIT_TR2_PERF</code> environment variable  -is set.</p></div>   <div class="paragraph"><p>Events are written as lines of the form:</p></div>   <div class="listingblock">   <div class="content">  @@ -1413,8 +1422,8 @@  <pre><code>15:33:33.532712 wt-status.c:2310 | d0 | main | region_enter | r1 | 0.126064 | | status | label:print   15:33:33.532712 wt-status.c:2331 | d0 | main | region_leave | r1 | 0.127568 | 0.001504 | status | label:print</code></pre>   </div></div>  -<div class="paragraph"><p>If <code>GIT_TR2_PERF_BRIEF</code> is true, the <code>time</code>, <code>file</code>, and <code>line</code>  -fields are omitted.</p></div>  +<div class="paragraph"><p>If <code>GIT_TR2_PERF_BRIEF</code> or <code>trace2.perfBrief</code> is true, the <code>time</code>, <code>file</code>,  +and <code>line</code> fields are omitted.</p></div>   <div class="listingblock">   <div class="content">   <pre><code>d0 | main | region_leave | r1 | 0.011717 | 0.009122 | index | label:preload</code></pre>  @@ -1424,8 +1433,6 @@  </div>   <div class="sect2">   <h3 id="_event_format">EVENT Format</h3>  -<div class="paragraph"><p>EVENT format is enabled when the <code>GIT_TR2_EVENT</code> environment  -variable is set.</p></div>   <div class="paragraph"><p>Each event is a JSON-object containing multiple key/value pairs   written as a single line and followed by a LF.</p></div>   <div class="listingblock">  @@ -1441,11 +1448,11 @@  <div class="content">   <pre><code>{   "event":"version",  - "sid":"1547659722619736-11614",  + "sid":"20190408T191827.272759Z-H9b68c35f-P00003510",   "thread":"main",  - "time":"2019-01-16 17:28:42.620713",  + "time":"2019-04-08T19:18:27.282761Z",   "file":"common-main.c",  - "line":38,  + "line":42,   ...   }</code></pre>   </div></div>  @@ -1513,9 +1520,9 @@  </p>   </dd>   </dl></div>  -<div class="paragraph"><p>If <code>GIT_TR2_EVENT_BRIEF</code> is true, the <code>file</code> and <code>line</code> fields are omitted  -from all events and the <code>time</code> field is only present on the "start" and  -"atexit" events.</p></div>  +<div class="paragraph"><p>If <code>GIT_TR2_EVENT_BRIEF</code> or <code>trace2.eventBrief</code> is true, the <code>file</code>  +and <code>line</code> fields are omitted from all events and the <code>time</code> field is  +only present on the "start" and "atexit" events.</p></div>   </div>   <div class="sect3">   <h4 id="_event_specific_key_value_pairs">Event-Specific Key/Value Pairs</h4>  @@ -1549,6 +1556,7 @@  <pre><code>{   "event":"start",   ...  + "t_abs":0.001227, # elapsed time in seconds   "argv":["git","version"]   }</code></pre>   </div></div>  @@ -1909,7 +1917,7 @@  </div></div>   <div class="paragraph"><p>The <code>category</code> field may be used in a future enhancement to   do category-based filtering.</p></div>  -<div class="paragraph"><p>The <code>GIT_TR2_EVENT_NESTING</code> environment variable can be used to  +<div class="paragraph"><p><code>GIT_TR2_EVENT_NESTING</code> or <code>trace2.eventNesting</code> can be used to   filter deeply nested regions and data events. It defaults to "2".</p></div>   </dd>   <dt class="hdlist1">  @@ -2172,7 +2180,7 @@    $ cat ~/log.perf   d0 | main | version | | | | | 2.20.1.160.g5676107ecd.dirty  -d0 | main | start | | | | | git status  +d0 | main | start | | 0.001173 | | | git status   d0 | main | def_repo | r1 | | | | worktree:/Users/jeffhost/work/gfw   d0 | main | cmd_name | | | | | status (status)   ...  @@ -2215,7 +2223,7 @@  ...   $ cat ~/log.perf   d0 | main | version | | | | | 2.20.1.162.gb4ccea44db.dirty  -d0 | main | start | | | | | git status  +d0 | main | start | | 0.001173 | | | git status   d0 | main | def_repo | r1 | | | | worktree:/Users/jeffhost/work/gfw   d0 | main | cmd_name | | | | | status (status)   ...  @@ -2273,7 +2281,7 @@  ...   $ cat ~/log.perf   d0 | main | version | | | | | 2.20.1.156.gf9916ae094.dirty  -d0 | main | start | | | | | git status  +d0 | main | start | | 0.001173 | | | git status   d0 | main | def_repo | r1 | | | | worktree:/Users/jeffhost/work/gfw   d0 | main | cmd_name | | | | | status (status)   d0 | main | region_enter | r1 | 0.001791 | | index | label:do_read_index .git/index  @@ -2434,7 +2442,7 @@  <div id="footer">   <div id="footer-text">   Last updated  - 2019-05-09 02:15:17 JST  + 2019-05-14 01:01:04 JST   </div>   </div>   </body>  
diff --git a/technical/api-trace2.txt b/technical/api-trace2.txt index d0948ba..9e585b8 100644 --- a/technical/api-trace2.txt +++ b/technical/api-trace2.txt 
@@ -22,21 +22,41 @@  formats in the future. This might be used to define a binary format,  for example.   +Trace2 is controlled using `trace2.*` config values in the system and +global config files and `GIT_TR2*` environment variables. Trace2 does +not read from repo local or worktree config files or respect `-c` +command line config settings. +  == Trace2 Targets    Trace2 defines the following set of Trace2 Targets.  Format details are given in a later section.   -`GIT_TR2` (NORMAL):: +=== The Normal Format Target   -	a simple printf format like GIT_TRACE. -+ +The normal format target is a tradition printf format and similar +to GIT_TRACE format. This format is enabled with the `GIT_TR` +environment variable or the `trace2.normalTarget` system or global +config setting. + +For example +  ------------  $ export GIT_TR2=~/log.normal  $ git version  git version 2.20.1.155.g426c96fcdb  ------------ -+ + +or + +------------ +$ git config --global trace2.normalTarget ~/log.normal +$ git version +git version 2.20.1.155.g426c96fcdb +------------ + +yields +  ------------  $ cat ~/log.normal  12:28:42.620009 common-main.c:38 version 2.20.1.155.g426c96fcdb @@ -46,81 +66,86 @@  12:28:42.621250 trace2/tr2_tgt_normal.c:124 atexit elapsed:0.001265 code:0  ------------   -`GIT_TR2_PERF` (PERF):: +=== The Performance Format Target   -	a column-based format to replace GIT_TRACE_PERFORMANCE suitable for -	development and testing, possibly to complement tools like gprof. -+ +The performance format target (PERF) is a column-based format to +replace GIT_TRACE_PERFORMANCE and is suitable for development and +testing, possibly to complement tools like gprof. This format is +enabled with the `GIT_TR2_PERF` environment variable or the +`trace2.perfTarget` system or global config setting. + +For example +  ------------  $ export GIT_TR2_PERF=~/log.perf  $ git version  git version 2.20.1.155.g426c96fcdb  ------------ -+ + +or + +------------ +$ git config --global trace2.perfTarget ~/log.perf +$ git version +git version 2.20.1.155.g426c96fcdb +------------ + +yields +  ------------  $ cat ~/log.perf  12:28:42.620675 common-main.c:38 | d0 | main | version | | | | | 2.20.1.155.g426c96fcdb -12:28:42.621001 common-main.c:39 | d0 | main | start | | | | | git version +12:28:42.621001 common-main.c:39 | d0 | main | start | | 0.001173 | | | git version  12:28:42.621111 git.c:432 | d0 | main | cmd_name | | | | | version (version)  12:28:42.621225 git.c:662 | d0 | main | exit | | 0.001227 | | | code:0  12:28:42.621259 trace2/tr2_tgt_perf.c:211 | d0 | main | atexit | | 0.001265 | | | code:0  ------------   -`GIT_TR2_EVENT` (EVENT):: +=== The Event Format Target   -	a JSON-based format of event data suitable for telemetry analysis. -+ +The event format target is a JSON-based format of event data suitable +for telemetry analysis. This format is enabled with the `GIT_TR2_EVENT` +environment variable or the `trace2.eventTarget` system or global config +setting. + +For example +  ------------  $ export GIT_TR2_EVENT=~/log.event  $ git version  git version 2.20.1.155.g426c96fcdb  ------------ -+ + +or + +------------ +$ git config --global trace2.eventTarget ~/log.event +$ git version +git version 2.20.1.155.g426c96fcdb +------------ + +yields +  ------------  $ cat ~/log.event -{"event":"version","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.620713","file":"common-main.c","line":38,"evt":"1","exe":"2.20.1.155.g426c96fcdb"} -{"event":"start","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621027","file":"common-main.c","line":39,"argv":["git","version"]} -{"event":"cmd_name","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621122","file":"git.c","line":432,"name":"version","hierarchy":"version"} -{"event":"exit","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621236","file":"git.c","line":662,"t_abs":0.001227,"code":0} -{"event":"atexit","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621268","file":"trace2/tr2_tgt_event.c","line":163,"t_abs":0.001265,"code":0} +{"event":"version","sid":"sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.620713Z","file":"common-main.c","line":38,"evt":"1","exe":"2.20.1.155.g426c96fcdb"} +{"event":"start","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621027Z","file":"common-main.c","line":39,"t_abs":0.001173,"argv":["git","version"]} +{"event":"cmd_name","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621122Z","file":"git.c","line":432,"name":"version","hierarchy":"version"} +{"event":"exit","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621236Z","file":"git.c","line":662,"t_abs":0.001227,"code":0} +{"event":"atexit","sid":"20190408T191610.507018Z-H9b68c35f-P000059a8","thread":"main","time":"2019-01-16T17:28:42.621268Z","file":"trace2/tr2_tgt_event.c","line":163,"t_abs":0.001265,"code":0}  ------------   -== Enabling a Target +=== Enabling a Target   -A Trace2 Target is enabled when the corresponding environment variable -(`GIT_TR2`, `GIT_TR2_PERF`, or `GIT_TR2_EVENT`) is set. The following -values are recognized. +To enable a target, set the corresponding environment variable or +system or global config value to one of the following:   -`0`:: -`false`:: +include::../trace2-target-values.txt[]   -	Disables the target. - -`1`:: -`true`:: - -	Enables the target and writes stream to `STDERR`. - -`[2-9]`:: - -	Enables the target and writes to the already opened file descriptor. - -`<absolute-pathname>`:: - -	Enables the target, opens and writes to the file in append mode. - -	If the target already exists and is a directory, the traces will be -	written to files (one per process) underneath the given directory. They -	will be named according to the last component of the SID (optionally -	followed by a counter to avoid filename collisions). - -`af_unix:[<socket_type>:]<absolute-pathname>`:: - -	Enables the target, opens and writes to a Unix Domain Socket -	(on platforms that support them). -+ -Socket type can be either `stream` or `dgram`. If the socket type is -omitted, Git will try both. +If the target already exists and is a directory, the traces will be +written to files (one per process) underneath the given directory. They +will be named according to the last component of the SID (optionally +followed by a counter to avoid filename collisions).    == Trace2 API   @@ -165,17 +190,23 @@    These are concerned with the lifetime of the overall git process.   +`void trace2_initialize_clock()`:: + +	Initialize the Trace2 start clock and nothing else. This should +	be called at the very top of main() to capture the process start +	time and reduce startup order dependencies. +  `void trace2_initialize()`::   	Determines if any Trace2 Targets should be enabled and -	initializes the Trace2 facility. This includes starting the -	elapsed time clocks and thread local storage (TLS). +	initializes the Trace2 facility. This includes setting up the +	Trace2 thread local storage (TLS).  +  This function emits a "version" message containing the version of git  and the Trace2 protocol.  +  This function should be called from `main()` as early as possible in -the life of the process. +the life of the process after essential process initialization.    `int trace2_is_enabled()`::   @@ -242,15 +273,16 @@ 	Emits a "def_param" messages for "important" configuration 	settings.  + -The environment variable `GIT_TR2_CONFIG_PARAMS` can be set to a +The environment variable `GIT_TR2_CONFIG_PARAMS` or the `trace2.configParams` +config value can be set to a  list of patterns of important configuration settings, for example:  `core.*,remote.*.url`. This function will iterate over all config  settings and emit a "def_param" message for each match.    `void trace2_cmd_set_config(const char *key, const char *value)`::   -	Emits a "def_param" message for a specific configuration -	setting IFF it matches the `GIT_TR2_CONFIG_PARAMS` pattern. +	Emits a "def_param" message for a new or updated key/value +	pair IF `key` is considered important.  +  This is used to hook into `git_config_set()` and catch any  configuration changes and update a value previously reported by @@ -417,9 +449,6 @@    === NORMAL Format   -NORMAL format is enabled when the `GIT_TR2` environment variable is -set. -  Events are written as lines of the form:    ------------ @@ -436,8 +465,8 @@  Note that this may contain embedded LF or CRLF characters that are  not escaped, so the event may spill across multiple lines.   -If `GIT_TR2_BRIEF` is true, the `time`, `filename`, and `line` fields -are omitted. +If `GIT_TR2_BRIEF` or `trace2.normalBrief` is true, the `time`, `filename`, +and `line` fields are omitted.    This target is intended to be more of a summary (like GIT_TRACE) and  less detailed than the other targets. It ignores thread, region, and @@ -445,9 +474,6 @@    === PERF Format   -PERF format is enabled when the `GIT_TR2_PERF` environment variable -is set. -  Events are written as lines of the form:    ------------ @@ -507,8 +533,8 @@  15:33:33.532712 wt-status.c:2331 | d0 | main | region_leave | r1 | 0.127568 | 0.001504 | status | label:print  ------------   -If `GIT_TR2_PERF_BRIEF` is true, the `time`, `file`, and `line` -fields are omitted. +If `GIT_TR2_PERF_BRIEF` or `trace2.perfBrief` is true, the `time`, `file`, +and `line` fields are omitted.    ------------  d0 | main | region_leave | r1 | 0.011717 | 0.009122 | index | label:preload @@ -519,9 +545,6 @@    === EVENT Format   -EVENT format is enabled when the `GIT_TR2_EVENT` environment -variable is set. -  Each event is a JSON-object containing multiple key/value pairs  written as a single line and followed by a LF.   @@ -539,11 +562,11 @@  ------------  { 	"event":"version", -	"sid":"1547659722619736-11614", +	"sid":"20190408T191827.272759Z-H9b68c35f-P00003510", 	"thread":"main", -	"time":"2019-01-16 17:28:42.620713", +	"time":"2019-04-08T19:18:27.282761Z", 	"file":"common-main.c", -	"line":38, +	"line":42, 	...  }  ------------ @@ -575,9 +598,9 @@  `"repo":<repo-id>`:: 	when present, is the integer repo-id as described previously.   -If `GIT_TR2_EVENT_BRIEF` is true, the `file` and `line` fields are omitted -from all events and the `time` field is only present on the "start" and -"atexit" events. +If `GIT_TR2_EVENT_BRIEF` or `trace2.eventBrief` is true, the `file` +and `line` fields are omitted from all events and the `time` field is +only present on the "start" and "atexit" events.    ==== Event-Specific Key/Value Pairs   @@ -600,6 +623,7 @@  { 	"event":"start", 	... +	"t_abs":0.001227, # elapsed time in seconds 	"argv":["git","version"]  }  ------------ @@ -887,7 +911,7 @@  The `category` field may be used in a future enhancement to  do category-based filtering.  + -The `GIT_TR2_EVENT_NESTING` environment variable can be used to +`GIT_TR2_EVENT_NESTING` or `trace2.eventNesting` can be used to  filter deeply nested regions and data events. It defaults to "2".    `"region_leave"`:: @@ -1117,7 +1141,7 @@    $ cat ~/log.perf  d0 | main | version | | | | | 2.20.1.160.g5676107ecd.dirty -d0 | main | start | | | | | git status +d0 | main | start | | 0.001173 | | | git status  d0 | main | def_repo | r1 | | | | worktree:/Users/jeffhost/work/gfw  d0 | main | cmd_name | | | | | status (status)  ... @@ -1162,7 +1186,7 @@  ...  $ cat ~/log.perf  d0 | main | version | | | | | 2.20.1.162.gb4ccea44db.dirty -d0 | main | start | | | | | git status +d0 | main | start | | 0.001173 | | | git status  d0 | main | def_repo | r1 | | | | worktree:/Users/jeffhost/work/gfw  d0 | main | cmd_name | | | | | status (status)  ... @@ -1218,7 +1242,7 @@  ...  $ cat ~/log.perf  d0 | main | version | | | | | 2.20.1.156.gf9916ae094.dirty -d0 | main | start | | | | | git status +d0 | main | start | | 0.001173 | | | git status  d0 | main | def_repo | r1 | | | | worktree:/Users/jeffhost/work/gfw  d0 | main | cmd_name | | | | | status (status)  d0 | main | region_enter | r1 | 0.001791 | | index | label:do_read_index .git/index